home *** CD-ROM | disk | FTP | other *** search
/ CD Ware Multimedia 1995 May / cd Ware (Juegos) Epimundo.iso / DOS / C / SPPBC3.ZIP / SERIAL.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-10  |  4.8 KB  |  213 lines

  1. #ifndef _SERIAL_H
  2. #define _SERIAL_H
  3. //============================================================================
  4. //
  5. //  SERIAL.H
  6. //
  7. //  Source include file for class SerialPort
  8. //  Serial++ Library SPP.LIB Ver. 1.10
  9. //
  10. //  Copyright (c) 1991, 1992 Cortlandt Technologies, All rights reserved.
  11. //
  12. //  Cortlandt Technologies, P.O. Box 195, Pleasantville NY 10570
  13. //
  14. //  Please direct all inquiries to the above address,
  15. //  or via Compuserve: 71066,155
  16. //
  17. //============================================================================
  18.  
  19. #ifndef __STDLIB_H
  20. #include <stdlib.h>
  21. #endif
  22.  
  23.     enum CommPort
  24.         {
  25.         COM_1,
  26.         COM_2,
  27.         CommPort_Ct
  28.         };
  29.  
  30.     enum Baud
  31.         {            // divisors for selected rates
  32.         B_50      = 2304,
  33.         B_75      = 1536,
  34.         B_110     = 1047,
  35.         B_134_5   = 857,
  36.         B_150     = 768,
  37.         B_300     = 384,
  38.         B_600     = 192,
  39.         B_1200    = 96,
  40.         B_1800    = 64,
  41.         B_2000    = 58,
  42.         B_2400    = 48,
  43.         B_3600    = 32,
  44.         B_4800    = 24,
  45.         B_7200    = 16,
  46.         B_9600    = 12,
  47.         B_19200   = 6,
  48.         B_38400   = 3,
  49.         B_57600   = 2,
  50.         B_115200  = 1
  51.         };
  52.  
  53.     enum Parity
  54.         {            // bit pattern for parity set
  55.         P_N = 0,        // none
  56.         P_O = 0x0008,        // odd
  57.         P_E = 0x0018,        // even
  58.         P_M = 0x0028,        // mark
  59.         P_S = 0x0038        // space
  60.         };
  61.  
  62.     enum DataBits
  63.         {            // bit pattern for data bits set
  64.         D_5 = 0,
  65.         D_6 = 1,
  66.         D_7 = 2,
  67.         D_8 = 3 
  68.         };
  69.  
  70.     enum StopBits
  71.         {            // bit pattern for stop bits set
  72.         S_1,
  73.         S_2 
  74.         };
  75.  
  76.     enum CommRegs
  77.         {              // Comm port registers:
  78.         RBR,           // Receive Buffer
  79.         THR,           // Transmit Hold
  80.         DLR,           // Divisor LSB
  81.         DMR,           // Divisor MSB
  82.         IER,           // Interrupt Enable
  83.         IIR,           // Interrupt Id
  84.         LCR,           // Line Control
  85.         MCR,           // Modem Control
  86.         LSR,           // Line Status
  87.         MSR,           // Modem Status
  88.         CommRegs_Ct    // last enum has value == ct
  89.         };
  90.  
  91.     enum LSR_Masks
  92.         {
  93.         DR       =  0x0001,   // data ready
  94.         OE       =  0x0002,   // overrun error
  95.         PE       =  0x0004,   // parity error
  96.         FE       =  0x0008,   // framing error
  97.         BI       =  0x0010,   // break indication
  98.         THRE     =  0x0020,   // THR empty
  99.         TSRE     =  0x0040    // Transmit Shift empty
  100.         };
  101.  
  102.     enum MSR_Masks
  103.         {
  104.         DCTS     =  0x0001,   // delta clear to send
  105.         DDSR     =  0x0002,   // delta data set ready
  106.         TERI     =  0x0004,   // trailing edge ring ind
  107.         DDCD     =  0x0008,   // delta data carrier detect
  108.         CTS      =  0x0010,   // clear to send
  109.         DSR      =  0x0020,   // data set ready
  110.         RI       =  0x0040,   // ring indicator
  111.         DCD      =  0x0080    // data carrier detect
  112.         };
  113.  
  114.     enum MCR_Masks
  115.         {
  116.         DTR      =  0x0001,   // data terminal ready
  117.         RTS      =  0x0002,   // req to sent
  118.         OUT1     =  0x0004,   // aux user o/p 1
  119.         OUT2     =  0x0008,   // aux user o/p 2
  120.         LOOP     =  0x0010    // enable loopback
  121.         };
  122.  
  123.     const size_t SERIALPORT_STD_BUF_SIZE = 2048;
  124.  
  125. //===========================================================================
  126.  
  127.     struct PortAnchor;
  128.  
  129.     class SerialPort
  130.         {
  131.         private:
  132.  
  133.             PortAnchor        *pa;
  134.  
  135.             Baud            speed;
  136.             DataBits        data_bits;
  137.             StopBits        stop_bits;
  138.             Parity            parity;
  139.             CommPort               c_port;
  140.  
  141.             void open(size_t b_size, int irq, unsigned int io_addr);
  142.  
  143.             static void close(PortAnchor *anc);
  144.             static void breakCheck(void);
  145.  
  146.         public:
  147.  
  148.             SerialPort(CommPort     cp,
  149.                    Baud         sp=B_1200,
  150.                    DataBits     db=D_8,
  151.                    Parity       ps=P_N,
  152.                    StopBits     sb=S_1,
  153.                    size_t       b_size=SERIALPORT_STD_BUF_SIZE,
  154.                    int          brk_off = 0,
  155.                    int            irq = 0,
  156.                    unsigned int io_addr = 0);
  157.  
  158.             virtual ~SerialPort(void);
  159.  
  160. //               input routines
  161.             virtual int inbyte(unsigned char &cc, unsigned int timeout=0);
  162.             virtual void unbyte(unsigned char cc);
  163.  
  164.             virtual size_t inmem(void *mp,
  165.                          size_t msize,
  166.                          unsigned int timeout=0);
  167.  
  168.             virtual char *instr(char *buf,
  169.                         size_t maxlen,
  170.                         unsigned int timeout=0);
  171.  
  172. //               output routines
  173.             virtual void outbyte(unsigned char cc);
  174.  
  175.             virtual void outmem(const void *mp, size_t msize);
  176.  
  177.             virtual void outstr(const char *buf);
  178.  
  179. //            line status and control routines
  180.             int checkLSR(unsigned char &cc);
  181.             int getLSR(LSR_Masks mm);
  182.             int readLSR(void);
  183.  
  184.             int checkMSR(unsigned char &cc);
  185.             int getMSR(MSR_Masks mm);
  186.             int readMSR(void);
  187.  
  188.             int setMCR(MCR_Masks mm, int state);
  189.  
  190.             void sendBreak(int dur=750);
  191.  
  192. //            SerialPort status routines
  193.             int lineOK(void);
  194.  
  195.             int isOwner(void);
  196.  
  197.             Baud getSpeed(void);
  198.  
  199.             DataBits getDataBits(void);
  200.  
  201.             StopBits getStopBits(void);
  202.  
  203.             Parity getParity(void);
  204.  
  205.             int getBreakOff(void);
  206.  
  207.             CommPort getCommPort(void);
  208.  
  209.     };
  210.  
  211. //===========================================================================
  212. #endif
  213.